package com.mj.text;

import com.mj.Emp;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.math.BigDecimal;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * @Author：作者姓名
 * @Package：com.mj.text
 * @Project：g6_jdk1.8tz
 * @name：staut
 * @Date：2024/5/20 16:12
 */
@SpringBootTest
public class Statsone {



    @Test
    public void  doone(){


        //        Optional<Object> o = Optional.ofNullable(null);
//        Optional<Object> empty = Optional.empty();
//        System.out.println(empty);
//
//      //案例
//        Emp emp = new Emp("eee", "ccy", new BigDecimal("11.4"));
//        if (null !=emp){
//            String aaa = emp.getAaa();
//            System.out.println("普通调用:"+aaa);
//
//        }
//
//
//
//        //菜鸟使用
//        Optional<Emp> optionalEmp = Optional.ofNullable(emp);
//
//        if (optionalEmp.isPresent()){
//            Emp emp2 = optionalEmp.get();
//            System.out.println(emp2.getAaa());
//        }
//
//
//
//        //优雅
//        optionalEmp.map(new Function<Emp, String>() {
//            @Override
//            public String apply(Emp emp) {
//                return emp.getAaa();
//            }
//        });
//        optionalEmp.map(Emp::getAaa).ifPresent(System.out::println);


        Emp emp = new Emp("eee", "ccy", new BigDecimal("11.4"));

        Optional<Emp> optionalEmp = Optional.ofNullable(emp);
        optionalEmp.ifPresent(new Consumer<Emp>() {
            @Override
            public void accept(Emp emp) {
                othrMethod(emp);
            }
        });
        optionalEmp.ifPresent(this::othrMethod);


        //2.    orElse  和  orElseGet【懒加载,建议使用】 的区别
        Emp emp1 = optionalEmp.orElse(createEmp());
        Emp emp2 = optionalEmp.orElseGet(this::createEmp);





        //过滤
        optionalEmp.filter(new Predicate<Emp>() {
            @Override
            public boolean test(Emp emp) {
                return emp.getBbb().equalsIgnoreCase("ccy");
            }
        }).ifPresent(new Consumer<Emp>() {
            @Override
            public void accept(Emp emp) {
                System.out.println("fiter ==="+emp.getAaa());
            }
        });


        optionalEmp.filter(emp3 -> emp3.getAaa().equalsIgnoreCase("ccy")).ifPresent(emp3 -> System.out.println("filen ==="+emp3.getAaa()));

        //map和flatMap的区别
        optionalEmp.map(emp3 -> emp3.getAaa());

    }
    private  Emp createEmp() {
        System.out.println("createEmp======");
        return new Emp("E001","昌老师",new BigDecimal("80000"));
    }
    private   void othrMethod(Emp emp) {
        System.out.println("other");

    }

}
